<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // 1、 3 + 2 +“7”的结果是什么？3 + (2 + "7")的结果又是什么？这两个表达式输出的值是什么类型？
      // console.log(3 + 2 + "7"); // 57
      // console.log(3 + (2 + "7")); // 327

      // 2、6 - false的结果是什么？
      // console.log(6 - false); // 6

      // 3、6 - "false"和6 + "false"的结果分别是什么？结果输出值是什么数据类型？
      // console.log(6 - "false"); // NaN     console.log(typeof NaN); number
      // console.log(6 + "false"); // 6false 字符串

      // 4、请分析console.log(1 + - + + + - + -1)的结果？
      // 直接去掉+号，无视正数的+(可以忽略)
      // console.log(1 - - 1); // 2

      // 5、下面代码分别输出什么？前自增(自减)与后自增(自减)的区别？
      // let a = 1;
      // let b = ++a + ++a;
      // console.log(b);//5

      // let a = 1;
      // let b = a++ + a++;
      // console.log(b);//3

      // 6、分析下面代码，请问 j 和 y 分别是多少？(不要运行代码，自己分析后写出答案)
      // var i = 100;
      // i++;//100
      // j = i++;//j = 101 i = 101
      // y = ++j;//101
      // console.log(y);//102
      // console.log(j)//102

      // 7、JS中哪些值通过Boolean对象转换出来的值为`false`?
      // console.log(Boolean(0));
      // console.log(Boolean(undefined));
      // console.log(Boolean(NaN));
      // console.log(Boolean(null));
      // console.log(Boolean(""));
      // console.log(Boolean(false));

      // 8、分析下面代码的结果并解释原因。
      // let a = 1;
      // let b = 2;

      // console.log(a && b);//2
      // console.log(a || b);//1

      // 9、以下代码输出的结果分别是什么？
      // let a = true && "" && 12306;
      // let b = false || "" || undefined || "bluej" || 12306;

      // console.log(a);//“”
      // console.log(b);//“bluej”

      // 10、分析下面代码，分别输出什么？(以注释形式写在console.log后面)
      // let str = "12306";
      // let str1 = 1;
      // let num = 12306;
      // let boo = true;

      // console.log(str == num);//true
      // console.log(str === num);//false
      // console.log(str1 == boo);//true
      // console.log(str1 === boo);//false

      // 提高题，非必做

      // - 写出执行结果,并解释原因

      var company = {
        address: 'beijing',
      };
      var yideng = Object.create(company); // Object.create()方法会创建一个拥有指定原型和若干个指定属性的对象。他拥有两个参数一个是继承对象，后一个是该对象的属性设置
      console.log(yideng); //是一个空对象{} 里面并没有属性,因为我们并没有为他设置属性
      delete yideng.address; // delete方法删除的是当前对象中指定的值，他现在是空的，删或不删，都一样
      console.log(yideng.address); //通过Object.create方法创建出来的对象可以直接访问到他原型上的方法。

      // - 写出执行结果,并解释原因

      var x = 1;
      if (function f() {}) {
        //这里的这个函数在这里定义没有任何意义，他既没有返回值，也没有执行，就像写了个字符串在这里，代码必定可以走进if条件语句里面
        x += typeof f; //使用typrof判断一个不存在的变量或函数等都会返回undefined，所以这里做的是字符串拼接
      }
      console.log(x); //所以最终结果为 1undefined
    </script>
  </body>
</html>
